<?php
/**
 * Controller de usuários.
 *
 * @author    Chavão <freela@chavao.net>, Rodrigo Brandão <brandrod@gmail.com>
 * @copyright Copyright (c) 2011, Chavão
 * @version   0.1
 */

class UsuarioController extends AppController
{
	/**
	 * Controller index
	 * @access public
	 */
	public function index()
	{
		$this->set('ehMaster',$this->Usuario->ehMaster());
		if($this->Usuario->ehMaster()) 
			$this->layout = "default.admin";
		else
			$this->layout = "default.novo";
		if( $this->Usuario->ehAdmin() || $this->Usuario->ehMaster())
		{
			$iClienteId = $_SESSION['cliente_id'];
			$this->bCampoBusca = true;
			if(!$this->Usuario->ehMaster())
				$sCriterio = "(clie_id = ".$iClienteId.") AND (usua_ativo = 1)";
			else
				$sCriterio = "1 = 1";
			// Filtro por busca
			if( trim( $this->param('search') ) != '' )
			{
				$sCriterio .= " AND ( ";
				$sCriterio .= "(usua_nome LIKE '%".$this->param('search')."%')";
				$sCriterio .= " OR ";
				$sCriterio .= "(usua_chave LIKE '%".$this->param('search')."%')";
				$arrCliente = $this->Cliente->all(array('conditions' => array('clie_empresa LIKE "%'.urldecode($this->param('search')).'%"')));
				if($arrCliente) {
					$clie_id = NULL;
					foreach($arrCliente as $current)
						$clie_id[] = $current['clie_id'];
					$sCriterio .= " OR ";
					$sCriterio .= "(clie_id IN(".implode(',',$clie_id)."))";
				}
				$sCriterio .= " ) ";
			}
			$arrUsuario = $this->Usuario->all(array(
				'conditions' => array($sCriterio)
			));
			if(!$this->Usuario->ehMaster()) 
				$bAddUsuario = $this->Usuario->podeAddUsuario();
			else
				$bAddUsuario = true;
			$this->set('bAddUsuario',$bAddUsuario);
			$this->set('arrUsuario', $arrUsuario);
			$this->set('iMaxCamp', @$_SESSION['plan_campanhas']);
			$this->set('iMaxUsua', @$_SESSION['plan_usuarios']);
			$this->set('iMaxLead', @$_SESSION['plan_leads']);
		}
		else
		{
			$this->redirect('/lead');
		}
	}
	/**
	 * Controller adicionar
	 * @access public
	 */
	public function adicionar()
	{
		$this->bCampoBusca = false;
		$this->set('ehMaster',$this->Usuario->ehMaster());
		if($this->Usuario->ehMaster())
			$this->layout = "default.admin";
		else
			$this->layout = "default.novo";   
		$arrCliente = $this->Cliente->all();
		$this->set('arrCliente', $arrCliente);
		if( $this->Usuario->ehAdmin() )
		{
			if( !empty( $this->data ) )
			{
				if(!$this->Usuario->podeAddUsuario() && !$this->Usuario->ehMaster())
				{
					$this->redirect('/usuario');
				}
				else
				{
					$iClienteId = $_SESSION['cliente_id'];
					//buscando se já existe usuário com os mesmos dados
					$sCriterio = "(clie_id = '".$iClienteId."' and usua_ativo = '0')";
					$sCriterio .= " AND "; 
					$sCriterio .= "(usua_chave = '".$this->data['usua_chave']."' OR usua_nome = '".$this->data['usua_nome']."' OR usua_email = '".$this->data['usua_email']."')";
					$objUsua = $this->Usuario->first(array(
				'conditions' => array($sCriterio)
					));
					if(count($objUsua) > 0)
					{
						$dados = "";
						foreach ($this->data as $key => $value) {
							$dados.=$key.'="'.$value.'"&';
						}
						if($this->data['usua_chave'] == $objUsua['usua_chave'])
							$dados.='parametroIgual=login';
						if($this->data['usua_email'] == $objUsua['usua_email'])
							$dados.='parametroIgual=e-mail';
						if($this->data['usua_nome'] == $objUsua['usua_nome'])
							$dados.='parametroIgual=nome';
						$this->set('dados', $dados);
						$this->set('msg', "reativar");
					}
					else
					{
						$this->data['usua_senha'] = md5( $this->data['usua_senha'] );
						$this->data['clie_id'] = ( isset($this->data['clie_id']) ) ? $this->data['clie_id'] : $iClienteId;
						$retorno = $this->Usuario->save( $this->data );
						if($retorno!=1)
						{
							$this->set('msg', "erro");
						}
						else
							$this->redirect('/usuario');
					}
				}
			}
		}
		else
		{
			$this->redirect('/lead');
		}
	}
	/**
	 * Controller editar
	 * @access public
	 * @param integer $piUsuaId Número do ID do usuário para edição
	 */
	public function editar( $piUsuaId = null )
	{
		$this->bCampoBusca = false;
		$this->set('ehMaster',$this->Usuario->ehMaster());
		if($this->Usuario->ehMaster())
			$this->layout = "default.admin";
		else
			$this->layout = "default.novo";   
		$arrCliente = $this->Cliente->all();
		$this->set('arrCliente', $arrCliente);

		if( $piUsuaId == null ) $this->redirect('/usuario');

		if( $this->Usuario->ehAdmin() )
		{
			if( !empty( $this->data ) )
			{
				$iClienteId = $_SESSION['cliente_id'];

				if( trim( $this->data['usua_senha'] ) != '' )
				{
					$this->data['usua_senha'] = md5( $this->data['usua_senha'] );
				}
				else
				{
					unset( $this->data['usua_senha'] );
				}
				$this->data['usua_perm'] = ( isset($this->data['usua_perm'])  ) ? $this->data['usua_perm'] : 0;
				$this->data['clie_id'] = ( isset($this->data['clie_id'])  ) ? $this->data['clie_id'] : $iClienteId;
				$this->Usuario->id = $piUsuaId;
				$retorno = $this->Usuario->save( $this->data );
				if($retorno!=1)
				{
					$this->set('msg', "erro");
				}
				else
					$this->redirect('/usuario');
			}

			$objUsua = (object) $this->Usuario->first(array(
				'conditions' => array('usua_id' => $piUsuaId)
			));

			$this->set('objUsua', $objUsua);
		}
		else
		{
			$this->redirect('/lead');
		}
	}

	/**
	 * Controller excluir
	 * @access public
	 * @param integer $piUsuaId Número do ID do usuário para exclusão
	 */
	public function excluir( $piUsuaId = null )
	{
		$this->autoRender = false;
		if( $piUsuaId == null ) $this->redirect('/usuario');
		//se não for admin não pode deletar
		if( $this->Usuario->ehAdmin() )
		{
			// desativar ao inves de excluir
			// $this->Usuario->delete( $piUsuaId );
			// procurar leads e comentários associados
			$aLead = $this->Lead->all(array(
				'conditions' => array('usua_id' => $piUsuaId)
			));
			$bComentario = $this->Comentario->first(array(
				'conditions' => array('usua_id' => $piUsuaId)
			));
			// se existir leads e comentários associados, desativar o usuário
			// os leads sem contato passam a ser de ninguém, ou são distribuidos por fila 
			// os outros leads são vistos apenas pelo admin se ele não reencaminhar
			// os comentários continuam aparecendo
			if((sizeof($aLead)>0) || (sizeof($bComentario)>0))
			{
				if(sizeof($aLead)>0)
				{
					foreach ($aLead as $objLead) 
					{
						if($objLead['lead_status'] == 1)
						{
							$oCamp = $this->Campanha->first(array(
											'conditions' => array( 'camp_id' => $objLead['camp_id'] )
							));
							if($oCamp['camp_fila'])
							{
								$oLead = $this->Lead->first(array(
										'conditions' =>  array( 'camp_id='.$objLead['camp_id']." order by lead_entrada desc" )
								));
								if($oLead['usua_id'] > 0) 
								{
									$arrUsuarios = $this->Usuario->all(array(
										'conditions' => array( 'clie_id='.$oCamp['clie_id']." and (usua_ativo = 1) order by usua_id asc" )
									));
									foreach ($arrUsuarios as $key => $usuario) 
									{
										if($usuario['usua_id'] == $oLead['usua_id']) 
										{
											if(($key+1) >= count($arrUsuarios))
												$objLead['usua_id'] = $arrUsuarios[0]['usua_id'];
											else
												$objLead['usua_id'] = $arrUsuarios[$key+1]['usua_id']; 
										}
									}
								}
								else
								{
									$oUsuario = $this->Usuario->first(array(
										'conditions' => array( 'clie_id='.$oCamp['clie_id']." order by usua_id asc" )
									));
									$objLead['usua_id'] = $oUsuario['usua_id'];
								}
							   
							}
							else
							{
							   
								$objLead['usua_id'] = null;
								
							}
							$this->Lead->id = $objLead['lead_id'];
							$this->Lead->save( $objLead );
						}
						
					}
				}
				$this->data = array();
				$this->data['usua_ativo'] = 0;
				$this->Usuario->id = $piUsuaId;
				$this->Usuario->save( $this->data );
				$this->redirect('/usuario'); 
			}
			//se não existir, não tem nenhum dado relevante do usuário no sistema
			// ele será deletado e seus compromissos, se existirem, também.
			else
			{
				$arrCompromisso = $this->Compromisso->all(array(
				'conditions' => array('usua_id' => $piUsuaId)
				));
				if(sizeof($arrCompromisso)>0)
				{
					foreach ($arrCompromisso as $oCompromisso) 
					{
						$this->Compromisso->delete( $oCompromisso['comp_id'] );
					}
				}
				$this->Usuario->delete( $piUsuaId );
				$this->redirect('/usuario'); 
			}
		}
		else
		{
			$this->redirect('/lead');
		}
	   
	}

	/**
	 * Controller login
	 * @access public
	 */
	public function login() {
		$this->layout = 'vazio';
		if(!empty($this->data)) {
			if($this->data['clie_url_acesso'] == "")
			   $arrCliente['clie_id'] = 0;
			else 
				$arrCliente = $this->Cliente->first(array('conditions' => array('clie_url_acesso' => $this->data['clie_url_acesso'])));
			if(sizeof($arrCliente)) {
				$arrConditions = array(
					'usua_ativo' => 1 ,
					//'usua_chave' => trim( $this->data['usua_chave'] ),
					'(usua_email="'.trim($this->data['usua_chave']).'" OR usua_chave="'.trim($this->data['usua_chave']).'")',
					'usua_senha' => trim(md5( $this->data['usua_senha'])),
					//'clie_id' => $arrCliente['clie_id']
				);
				$arrUsua = $this->Usuario->first(array('conditions' => $arrConditions));
				if($arrUsua['usua_perm'] != 2) {
					$arrCliente = $this->Cliente->first(array('conditions' => array('clie_id' => $arrUsua['clie_id'],'clie_status' => 1)));
					if(!$arrCliente)
						$this->redirect( $_SERVER['HTTP_REFERER'] );
				}
				if(sizeof($arrUsua)) {
					$objUsua = (object) $arrUsua;
					// Salvando sessão
					$_SESSION['usua_id'] = $objUsua->usua_id;
					$_SESSION['usua_nome'] = $objUsua->usua_nome;
					$_SESSION['usua_perm'] = $objUsua->usua_perm;
					$_SESSION['cliente_id'] = $objUsua->clie_id;
					if($arrCliente['clie_id'] != 0) {
						$_SESSION['plano_id'] = $arrCliente['plan_id'];
						$arrPlano = $this->Plano->first(array('conditions' => array('plan_id' => $arrCliente['plan_id'])));
						$objPlano = (object) $arrPlano;
						$_SESSION['plan_campanhas'] = $objPlano->plan_campanhas;
						$_SESSION['plan_usuarios'] = $objPlano->plan_usuarios;
						$_SESSION['plan_leads'] = $objPlano->plan_leads;
						$_SESSION['mostrar_alerta'] = true;
						$this->LogLeadControl->gravarLog('usuario','logando',$objUsua->usua_nome);
						$this->redirect('/lead');
					} else {
						$this->LogLeadControl->gravarLog('admin','logando',$objUsua->usua_nome);
						$this->redirect('/cliente');
					}
				} else
					$this->redirect( $_SERVER['HTTP_REFERER'] );
			} else
				$this->redirect( $_SERVER['HTTP_REFERER'] );
		}
	}
	/**
	 * Controller logout
	 * @access public
	 */
	public function logout()
	{
		$this->autoRender = false;
		session_destroy();
		$this->redirect('/usuario/login');
	}
	public function erro()
	{
		$this->layout = 'vazio';
	}
	public function erroEditar()
	{
		$this->layout = 'vazio';
		$this->set('dados', $this->data);
	}
	public function perguntaReativar()
	{
		$this->layout = 'vazio';
		$this->set('dados', $this->data);
	}
	
	public function novo()
	{
		$this->layout = "vazio";

		if( $this->Usuario->ehAdmin() )
		{
			if( !empty( $this->data ) )
			{
				if(!$this->Usuario->podeAddUsuario())
				{
					$this->redirect('/usuario');
				}
				else
				{
					$iClienteId = $_SESSION['cliente_id'];
					//buscando se já existe usuário com os mesmo login
					$sCriterio = "(clie_id = '".$iClienteId."' and usua_ativo = '0')";
					$sCriterio .= " AND (usua_chave = '".$this->data['usua_chave']."')";
					$objUsua = $this->Usuario->first(array(
								'conditions' => array($sCriterio)
					));
					if(count($objUsua) > 0)
					{
						//mudar o login desativado
						$objUsua['usua_chave'] = $objUsua['usua_chave']."_".$objUsua['usua_chave'];
						$this->Usuario->id = $objUsua['usua_id'];//descobrir parametro
						$this->Usuario->save( $objUsua );
					}
					$this->data['usua_senha'] = md5( $this->data['usua_senha'] );
					$this->data['clie_id'] = $iClienteId;
					$this->Usuario->id = null;
					$this->Usuario->save( $this->data );
					$this->redirect('/usuario');
				}
			}
		}
		else
		{
			$this->redirect('/lead');
		}
	}
	 /**
	 * Controller reativar
	 * @access public
	 */
	public function reativar()
	{
		$this->layout = "vazio";
		if( $this->Usuario->ehAdmin() )
		{
			if( !empty( $this->data ) )
			{
				$iClienteId = $_SESSION['cliente_id'];
				//buscando id para reativação
				$sCriterio = "(clie_id = '".$iClienteId."' and usua_ativo = '0')";
				$sCriterio .= " AND "; 
				$sCriterio .= "(usua_chave = '".$this->data['usua_chave']."' OR usua_nome = '".$this->data['usua_nome']."' OR usua_email = '".$this->data['usua_email']."')";
				$objUsua = $this->Usuario->first(array(
							'conditions' => array($sCriterio)
				));
				$this->data['usua_senha'] = md5( $this->data['usua_senha'] );
				$this->data['usua_perm'] = ( $this->data['usua_perm'] == 1 ) ? 1 : 0;
				$this->data['usua_ativo'] = 1;
				$this->Usuario->id = $objUsua['usua_id'];
				$this->Usuario->save( $this->data );
				$this->redirect('/usuario');
			}
		}
		else
		{
			$this->redirect('/lead');
		}
	}

	/**
	 * Controller senha
	 * @access public
	 */
	public function senha()
	{
		$email_enviado = 0;
		$this->layout = 'vazio';
		if( !empty($this->data) ) {
			@$email = trim($this->data['email']);
			$this->set('email',$email);
			$this->LogLeadControl->gravarLog('usuario','esqueceu senha',"usua_email:".$email);
			$first = $this->Usuario->first(array('conditions' => array('usua_email' => $email,'usua_ativo' => 1)));
			if($first) {
				$senha = strtoupper(substr(md5(rand(0,999)),0,8));
				$this->data['usua_senha'] = md5($senha);
				$this->Usuario->id = $first['usua_id'];
				$this->Usuario->save($this->data);
				$content = 'leadCONTROL<br><br>Olá '.$first['usua_nome'].',<br>Você solicitou a reinicialização de sua senha no sistema leadCONTROL.<br><br>Sua nova senha é: <strong>'.$senha.'</strong>';
				enviarEmail($first['usua_email'],'LeadControl: Sua nova senha',$content);
				$email_enviado = 1;
			} else {
				$email_enviado = 2;
			}
		}
		$this->set('emailEnviado',$email_enviado);
	}

}
?>